/**
 * 此文件为自定义工具类函数文件
 */

/**
 * 生成UUID
 * @returns 
 */
function getUUID() {
  var times = new Date().getTime();
  var uuid = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {
    var r = (times + Math.random() * 16) % 16 | 0;
    times = Math.floor(times / 16);
    return (c == 'x' ? r : (r & 0x3 | 0x8)).toString(16);
  });
  return uuid;
}

/**
 * AES加密
 * @param {*} password 
 */
function aesEncrypt(password) {
  return (CryptoJS.AES.encrypt(password, CONFIGS.aesKey)).toString();
}

/**
 * AES解密
 * @param {*} password 
 */
function aesDecrypt(password) {
  return (CryptoJS.AES.decrypt(password, CONFIGS.aesKey)).toString(CryptoJS.enc.Utf8);
}

/**
 * 页面跳转
 * @param {*} val  文件夹名称
 */
function redirectPages(val) {
  window.location.href = `./views/${val}/index.html`
}

/**
 * 获取元素
 * @param {String} name 名称
 * @param {*} type 类型，默认为id
 */
function getEleVal(name, type = "id") {
  let ele = null;
  switch (type) {
    case "id":
      ele = document.getElementById(name);
      break;
    case "class":
      ele = document.getElementsByClassName(name);
      break;
    default: {
      console.error("暂时不支持该类型获取");
      return;
    }
  }
  return ele;
}

/**
 * 更新背景组件
 */
function updataBgComponent() {
  const config = CONFIGS.bgComponentConfig;
  let updataFun = null;
  const divComponents = CONFIGS.PATHS["CUSTOMER_PATHS"]["bgComponents"];
  if (!config.status) {
    clearInterval(updataFun);
    return;
  }
  // 定时更新背景组件
  updataFun = function () {
    clearInterval(updataFun);
    console.log(Math.floor(Math.random() * divComponents.length));
    let html = divComponents[Math.floor(Math.random() * divComponents.length)].html;
    console.log(html);
    getEleVal("bgComponent").innerHTML = null;
    getEleVal("bgComponent").innerHTML = `<${html}></${html}>`;
    setInterval(() => {
      updataFun();
    }, config.times * 1000);
  }
  updataFun();

}

/**
 * 生成一个随机数
 * @param {*} max 最大值
 * @param {*} min 最小值，默认为0
 * @returns 
 */
function getRandomNumber(max, min = 0) {
  return Math.floor(Math.random() * (max - min + 1)) + min;
}

/**
 * 获取当前系统时间
 */
function getCurrentDateTime() {
  let currentDate = new Date();
  let year = currentDate.getFullYear();
  let month = currentDate.getMonth() + 1;
  let day = currentDate.getDate();
  let hours = currentDate.getHours();
  let minutes = currentDate.getMinutes();
  let seconds = currentDate.getSeconds();

  // 格式化时间数据，确保月、日、小时、分钟、秒都是两位数
  month = month < 10 ? '0' + month : month;
  day = day < 10 ? '0' + day : day;
  hours = hours < 10 ? '0' + hours : hours;
  minutes = minutes < 10 ? '0' + minutes : minutes;
  seconds = seconds < 10 ? '0' + seconds : seconds;
  return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`;
}

/**
 * 检查登录拦截处理
 */
function checkLoginStatus() {
  let activeUser = getStorage("activeUser");
  let loginStatus = getStorage("loginStatus");
  const currPageRoute = window.location.href; // 当前页面路由
  // 登录状态
  if (loginStatus && activeUser) {
    //非主页面
    if (!currPageRoute.match(/\bmonitor\b/)) {
      // 重定向主页面
      this.redirectPages("monitor");
    }
  } else {
    // 主页面
    if (currPageRoute.match(/\bmonitor\b/)) {
      ice.pop({
        icon: "fail",
        content: "登录已过期",
        url: "../../index.html"
      })
    }
  }
}

/**
 * 去除重复项
 * @param {*} list  列表
 * @param {*} field  字段
 * @returns 
 */
function uniqueArray(list, field = "id") {
  return Array.from(new Set(list.map(item => item[field]))).map(id => {
    return list.find(item => item[field] === id);
  })
}

/**
 * 滑动动画
 * @param {*} element element
 * @param {*} target 目标值
 */
function slideAnimate(element, target, callBack) {
  clearInterval(element.timer);
  element.timer = setInterval(function () {
    // 步长值
    var step = (target - element.offsetLeft) / 10;
    if (element.offsetLeft < -element.offsetWidth / 2) {
      // 向左走时，判断图片是否走完（这里本来时4张图片，加上后面追加的4张相同的，共有8张，所以需要用ul的总宽度来除以2进行判断），走完时重新开始
      element.style.left = "0px";
      clearInterval(element.timer);
      callBack ? callBack() : "";
    }
    if (element.offsetLeft > 0) {
      // 向右走时，判断图片是否走完
      clearInterval(element.timer);
      element.style.left = -element.offsetWidth / 2 + 'px';
      callBack ? callBack() : "";
    }
    element.style.left = element.offsetLeft + step + 'px';
  }, 15)
}